Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.10.2014, 16:25
Новичок на форуме
Отправить личное сообщение для xsaven Посмотреть профиль Найти все сообщения от xsaven
 
Регистрация: 05.04.2012
Сообщений: 2

Помоги с динамической загрузкой страницы через ajax
Есть функция:
function ajax_loadin_page(){
    $("[href]").click(function(){
        var url = $(this).attr('href');
        var docWidth = $(document).width();
        
        if(docWidth<768 || url=='/sign_out' || url=='#'){
            location=url; return false;    
        }
        
        $('#ajax-content').css('opacity', '0.5');
        $('#pageLoading').show();
        
        if(url.indexOf('http') + 1) {
            location=url; return false;
        }
        
        var simb = '?';
        if(url.indexOf('?') + 1) {
            simb = '&';
        }

        $.ajax({
            url:     url + simb +'ajax=1',
            success: function(r){
                $('#ajax-content').css('opacity', '1');
                $('#ajax-content').html(r);
                $('#pageLoading').hide();
                ajax_loadin_page();
                
                if (url != window.location){
                    window.history.pushState(null, null, url);
                }
                if($(".masonry").length>0) {
                    var container = document.querySelector('.masonry');
                    var msnry = new Masonry( container );
                    msnry.reloadItems(); 
                }
                return false;
            }
        });
        
        return false;
    });
}

Вроде бы работает всё четко, но иногда запросы $.ajax повторяются по 50-100 раз самостоятельно, подскажите, у меня уже голова болит(((
Ответить с цитированием
  #2 (permalink)  
Старый 16.10.2014, 17:22
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Может скапливаются дубли обработчиков click ? Твой алгоритм будет работать только если все [href] будут затираться аяксом. Если какие-то находятся вне #ajax-content - то на них будет навешан обработчик 2й, 3й и тд разы. В итоге при клике будет запущена целая куча запросов.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 16.10.2014, 17:36
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от xsaven
simb +'ajax=1',
Вот это нафиг не нужно. На сервере достаточно проверять http-заголовок X-Requested-With: XMLHttpRequest (его выставляет jQuery при запросах)
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 16.10.2014, 18:05
Новичок на форуме
Отправить личное сообщение для xsaven Посмотреть профиль Найти все сообщения от xsaven
 
Регистрация: 05.04.2012
Сообщений: 2

ну смотри я переделал таким образом:
function inner_ajax_loadin_page(){
    $("#ajax-content [href]").click(function(){
        var url = $(this).attr('href');
        var docWidth = $(document).width();
        
        if(docWidth<768 || url=='/sign_out' || url=='#'){
            location=url; return false;    
        }
        
        $('#ajax-content').css('opacity', '0.5');
        $('#pageLoading').show();
        
        if(url.indexOf('http') + 1) {
            location=url; return false;
        }
        
        var simb = '?';
        if(url.indexOf('?') + 1) {
            simb = '&';
        }

        $.ajax({
            url:     url + simb +'ajax=1',
            success: function(r){
                $('#ajax-content').css('opacity', '1');
                $('#ajax-content').html(r);
                $('#pageLoading').hide();
                
                $('#Posts').animate({ scrollTop:0 },"slow");
                
                if (url != window.location){
                    window.history.pushState(null, null, url);
                }
                if($(".masonry").length>0) {
                    var container = document.querySelector('.masonry');
                    var msnry = new Masonry( container );
                    msnry.reloadItems(); 
                }
                return false;
            }
        });
        
        return false;
    });
}

function ajax_loadin_page(){
    $("[href]").click(function(){
        var url = $(this).attr('href');
        var docWidth = $(document).width();
        
        if(docWidth<768 || url=='/sign_out' || url=='#'){
            location=url; return false;    
        }
        
        $('#ajax-content').css('opacity', '0.5');
        $('#pageLoading').show();
        
        if(url.indexOf('http') + 1) {
            location=url; return false;
        }
        
        var simb = '?';
        if(url.indexOf('?') + 1) {
            simb = '&';
        }

        $.ajax({
            url:     url + simb +'ajax=1',
            success: function(r){
                $('#ajax-content').css('opacity', '1');
                $('#ajax-content').html(r);
                $('#pageLoading').hide();
                inner_ajax_loadin_page();
                
                $('#Posts').animate({ scrollTop:0 },"slow");
                
                if (url != window.location){
                    window.history.pushState(null, null, url);
                }
                if($(".masonry").length>0) {
                    var container = document.querySelector('.masonry');
                    var msnry = new Masonry( container );
                    msnry.reloadItems(); 
                }
                return false;
            }
        });
        
        return false;
    });
}


так не происходит дублирования но все равно количество запросов идёт по многу!
Ответить с цитированием
  #5 (permalink)  
Старый 16.10.2014, 18:32
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Тогда не знаю. Поставь точку останова, смотри цепочку вызовов. Хром показывает даже асинхронные цепочки.
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
загрузка через AJAX в модальные окна hardware AJAX и COMET 2 20.01.2014 11:48
загрузка через AJAX в модальные окна hardware jQuery 4 09.01.2014 21:33
jquery не видит value input-a, загруженного через ajax Mukhtar AJAX и COMET 1 25.12.2013 02:41
Input подгружаемый через ajax не выдает переменную Mukhtar AJAX и COMET 5 22.12.2013 21:10
Просмотр передаваемых данных через AJAX Гость AJAX и COMET 3 04.08.2008 14:34